package org.demo.config;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
import org.demo.config.extendSqlMethods.*;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.List;

/**
 * 此 demo 专用，用于兼容 mhb版 以及 yulichang版 两套不同的 join 框架。
 * TIPS: 由于版本变化，可能 getMethodList 的参数会变化，需要根据实际情况修改。
 *
 * @author yexi
 * @see AbstractMethod
 */
@Configuration
public class SqlInjectorConfiguration extends AbstractSqlInjector {

    /**
     * 1、重写 getMethodList 方法，融合两套 join 框架的方法。
     * 2、增加自定义扩展的sql方法。
     *
     * @see com.baomidou.mybatisplus.core.injector.DefaultSqlInjector plus默认的 SqlInjector，若没有其他 SqlInjector 会自动注入
     * @see com.github.yulichang.injector.MPJSqlInjector yulichang版 SqlInjector，自动装配时若没有其他 SqlInjector 会自动注入
     * @see icu.mhb.mybatisplus.plugln.injector.JoinDefaultSqlInjector 非starter框架。默认就需要手动注入才能激活。
     */
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        com.github.yulichang.injector.MPJSqlInjector mpjSqlInjector = new com.github.yulichang.injector.MPJSqlInjector();
        List<AbstractMethod> methodList = mpjSqlInjector.getMethodList(mapperClass);
        List<AbstractMethod> list = Arrays.asList(
                new icu.mhb.mybatisplus.plugln.injector.methods.JoinSelectList(),
                new icu.mhb.mybatisplus.plugln.injector.methods.JoinSelectCount(),
                new icu.mhb.mybatisplus.plugln.injector.methods.JoinSelectOne(),
                new icu.mhb.mybatisplus.plugln.injector.methods.JoinSelectPage()
        );
        methodList.addAll(list);
        List<AbstractMethod> customList = Arrays.asList(
                new UpdateByIdClickHouse(),
                new DeleteByIdClickHouse(),
                new UpdateClickHouse()
        );
        methodList.addAll(customList);
        return methodList;
    }

}
